package vista;

import java.net.URL;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import java.util.ResourceBundle;

import javax.swing.JOptionPane;

import controlador.CdCajas;
import entidades.Cajas;
import entidades.Clientes;
import entidades.iOperaciones;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.Button;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.control.TextArea;
import javafx.scene.control.TextField;
import javafx.scene.control.cell.PropertyValueFactory;


public class ControladorCajas implements Initializable, iOperaciones{
	
	@FXML
	TextField txtNCaja;
	@FXML
	
	TextArea txtDescripcion;
	@FXML
	Button btnGuardar;
	@FXML
	Button btnEliminar;
	@FXML
	TableView <Object>tvCajas;
	@FXML
	TableColumn tcNcajas;
	@FXML
	TableColumn tcDescripcion;
	
	
	private vista.MainApp mainApp;
	private boolean esnuevo=true;
	private Cajas cajas;
	private CdCajas datosCaja=new CdCajas();
	
	
	
	@Override
	public void initialize(URL arg0, ResourceBundle arg1) {
		// TODO Auto-generated method stub
			llenarTvCajas();
			btnGuardar.setOnAction(new btnGuardar_Click());
			btnEliminar.setOnAction(new btnEliminar_Click());
			tvCajas.getSelectionModel().selectedItemProperty().addListener(new ChangeListener<Object>(){

				@Override
				public void changed(ObservableValue<? extends Object> observable,
						Object oldValue, Object newValue) {
					// TODO Auto-generated method stub
					datosCaja(newValue);
					
				}
				
			});
			llenarTvCajas();
			btnGuardar.setOnAction(new btnGuardar_Click());
	}
	
private void datosCaja(Object seleccionado){
		
		cajas=(Cajas) seleccionado;
		if(cajas!=null){
		esnuevo=false;
		txtNCaja.setText(Integer.toString(cajas.getNumeroCaja()));
		txtDescripcion.setText(cajas.getDescripcion());
	
		}
	}
	
	
	public void limpiarCajas(){
		esnuevo=true;
		txtNCaja.setText("");
		txtDescripcion.setText("");
		
	}
	
	public void llenarTvCajas(){
		List<Object>lista=new ArrayList<Object>();
		try {
			lista=listar();
		} catch (ClassNotFoundException | InstantiationException
				| IllegalAccessException | SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		ObservableList<Object>listaObs=FXCollections.observableArrayList(lista);
		tcNcajas.setCellValueFactory(new PropertyValueFactory<Cajas,Integer>("numeroCaja"));
		tcDescripcion.setCellValueFactory(new PropertyValueFactory<Cajas,String>("descripcion"));
		tvCajas.setItems(listaObs);
	}
	
	private class btnGuardar_Click implements EventHandler<ActionEvent>
	{
			@Override
		public void handle(ActionEvent arg0) {
				if(esnuevo==true){
					cajas=new Cajas(txtDescripcion.getText());
					try{
						
						if(agregar(cajas)){
							JOptionPane.showMessageDialog(null, "registro existoso");
							
							llenarTvCajas();
							limpiarCajas();
							
						}
						else{
							System.out.println("registro fallido");
						}	
						
					}
					catch(Exception e){
						System.out.print(e);
						esnuevo=false;
					}
					
				}
				else{
					if(esnuevo==false){
					cajas.setNumeroCaja(Integer.parseInt(txtNCaja.getText()));
					cajas.setDescripcion(txtDescripcion.getText());
					try{
						
						if(actualizar(cajas)){
							System.out.println("Modificacion exitosa");
							llenarTvCajas();
							limpiarCajas();
						}
						else{
							System.out.println("Modificacion fallida");
						}	
						
					}
					catch(Exception e){
						System.out.print(e);
						esnuevo=false;
					}
				}
				}
				
				
			}
			
	
	}
	
	
	
	private class btnEliminar_Click implements EventHandler<ActionEvent>{

		@Override
		public void handle(ActionEvent arg0) {
			// TODO Auto-generated method stub
				
			cajas.setNumeroCaja(Integer.parseInt(txtNCaja.getText()));
			cajas.setDescripcion(txtDescripcion.getText());
			
			
			try{
				
				if(eliminar(cajas)){
					System.out.println("cliente eliminado exitosamente");
					llenarTvCajas();
					limpiarCajas();
				}
				else{
					System.out.println("operacin  fallida");
				}	
				
			}
			catch(Exception e){
				System.out.print(e);
				esnuevo=false;
			}	
		}
			
		}
	
	
	public void setMainApp(vista.MainApp mainApp){
		this.mainApp=mainApp;
	}

	@Override
	public boolean agregar(Object nuevo) throws ClassNotFoundException,
			InstantiationException, IllegalAccessException, SQLException {
		// TODO Auto-generated method stub
		return datosCaja.agregar(nuevo);
	}

	@Override
	public boolean actualizar(Object modificado) throws ClassNotFoundException,
			InstantiationException, IllegalAccessException, SQLException {
		// TODO Auto-generated method stub
		return datosCaja.actualizar(modificado);
	}

	@Override
	public boolean eliminar(Object eliminado) throws ClassNotFoundException,
			InstantiationException, IllegalAccessException, SQLException {
		// TODO Auto-generated method stub
		return datosCaja.eliminar(eliminado);
	}

	@Override
	public List<Object> listar() throws ClassNotFoundException,
			InstantiationException, IllegalAccessException, SQLException {
		// TODO Auto-generated method stub
		return datosCaja.listar();
	}

}